package com.cw.jeeyt.dao.mapper.security;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.cw.jeeyt.common.annotation.LogParam;
import com.cw.jeeyt.dao.model.security.SecurityResourceDo;
import com.cw.lang.common.mapper.common.CommonMapper;

/**
 * 资源信息 dao数据库操作接口
 *
 * @author chenw
 * @version 1.0.0
 */
public interface SecurityResourceMapper extends CommonMapper<SecurityResourceDo> {

    /**
     * 修改资源信息
     *
     * @param resource
     */
    void update(SecurityResourceDo resource);

    /**
     * 查询所有资源信息
     *
     * @return 资源信息集合
     */
    ArrayList<SecurityResourceDo> queryResourceList();

    /**
     * 分页查询资源信息
     *
     * @param resource 查询条件
     * @return 资源信息集合
     */
    List<SecurityResourceDo> queryByPage(@Param("securityResource") SecurityResourceDo resource);

    /**
     * 根据用户名称查询用户资源
     *
     * @param userName
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourceByUserName(String userName);

    /**
     * 根据角色id查询资源信息
     *
     * @param roleId
     * @return
     * @throws Exception
     */
    ArrayList<SecurityResourceDo> getResourceByRoleId(Long roleId);

    /**
     * 加载根节点资源信息
     *
     * @return
     * @throws Exception
     */
    SecurityResourceDo queryRootSecurityResource();

    /**
     * 加载父节点下的所有资源信息
     *
     * @param resId
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> querySecurityResourceListByParentId(Long resId);

    /**
     * 根据用户角色加载资源信息
     *
     * @param roles
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourcesByUserRoles(@Param("roles") String[] roles);

    /**
     * 根据用户ID查询用户权限信息
     *
     * @param userId
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourcesByUserId(Long userId);

    /**
     * 更新父节点id
     *
     * @param id
     * @param parentId
     * @throws Exception
     */
    void updateResourceParentId(@Param("id") Long id, @Param("parentId") Long parentId);

    /**
     * 更新资源名称
     *
     * @param id
     * @param resName
     * @throws Exception
     */
    void updateResourceName(@Param("id") Long id, @Param("resName") String resName);

    List<SecurityResourceDo> querySelectSecurityResource(@Param("securityResource") SecurityResourceDo resource)
   ;

    /**
     * 删除父节点下所有的资源
     *
     * @param parentId
     */
    @LogParam(logDes = "删除父节点下所有的资源", operateModule = "资源信息管理")
    void deleteByParentId(Long parentId);

    /**
     * 查询父id下的所有按钮资源
     *
     * @param parentId
     * @return
     */
    List<SecurityResourceDo> queryBtnListByParentId(Long parentId);

    /**
     * 根据资源名称及父id查询资源信息
     *
     * @param resName
     * @param parentId
     * @return
     */
    SecurityResourceDo getResByResNameAndParentId(@Param("resName") String resName, @Param("parentId") Long parentId);

    /**
     * 根据父id及资源名称更新按钮资源url
     *
     * @param btnRes
     */
    void updateResUrlByResTitleAndParentId(@Param("securityResource") SecurityResourceDo btnRes);

    /**
     * 批量新增资源信息
     *
     * @param srList
     */
    @LogParam(logDes = "批量新增资源信息", operateModule = "资源信息管理")
    void insertBat(List<SecurityResourceDo> srList);

    /**
     * 判断资源是否需要权限访问
     *
     * @param url
     * @return
     */
    Integer checkResourceNeedAuth(String url);

    /**
     * 更新按钮信息
     *
     * @param id
     * @param btnList
     */
    void updateBtnList(@Param("id") Long id, @Param("btnList") String btnList);
}
